package com.xzzz.irda.auth.server.service;


import com.xzzz.irda.auth.core.authorization.AuthorizationPassword;

/**
 * 授权用户的查询实现类
 *
 * 实现类注入到 Spring 中后授权方法 {@link AuthorizationPassword }
 * 会自动注入该实现类调用 {@link UserDetailService#loadUserByUsername}方法来查询当前请求登录的用户信息
 *
 * @author wangyf
 * 
 */
public interface UserDetailService {

    /**
     * 根据用户名查询用户信息
     *
     * @param username     用户名
     * @return 用户信息
     */
    UserDetail loadUserByUsername(String username);

    /**
     * 根据用户ID查询用户信息
     *
     * @param userId       用户ID
     * @return 用户信息
     */
    UserDetail loadUserByUserId(Long userId);

    /**
     * 根据手机号查询用户信息
     *
     * @param phone         手机号
     * @return 用户信息
     */
    UserDetail loadUserByPhone(String phone);

    /**
     * 根据 openId 查询用户信息
     *
     * @param openId       openId
     * @return 用户信息
     */
    UserDetail loadUserByWxOpenId(String openId);
}
